<?php
require_once dirname(__FILE__) . '/../Storage/diskunit.php';
require_once dirname(__FILE__) . '/Calendar2.php';

class マッピング＿チケットカレンダーログレコード extends object {
	public $チケットID;
	public $カレンダーイベントID;
}
class マッピング＿チケットカレンダーログ extends  Binder
{
	const MANTIS_URL = 'http://minder.minibird.jp/mantis/view.php?id=';
	public function __construct() {
		$保管場所 = dirname ( __FILE__ ) . '/databox';
		if (!file_exists($保管場所)) {
			mkdir($保管場所,0777,TRUE);
		}
		$ストレージ = new Storage_Diskunit('mantis', $保管場所);
		parent::__construct('マッピング＿チケットカレンダーログ', $ストレージ, TRUE);
	}
	public function 追加する($チケットID, $カレンダーイベントID = FALSE) {
		$マップレコード = FALSE;
		if ($チケットID instanceof マッピング＿チケットカレンダーログレコード) {
			$マップレコード = $チケットID;
			$チケットID = $マップレコード->チケットID;
			$カレンダーイベントID = $マップレコード->カレンダーイベントID;
		}
		$this->一括削除 ( 'チケットID', $チケットID );
		$this->一括削除 ( 'カレンダーイベントID', $カレンダーイベントID );
		$マップレコード = new マッピング＿チケットカレンダーログレコード ();
		$マップレコード->チケットID = $チケットID;
		$マップレコード->カレンダーイベントID = $カレンダーイベントID;
		$this->bind ( $マップレコード );
	}
	public function 一括削除($プロパティ名, $値)
	{
		foreach ($this->_pages as $key=>$page) {
			if (property_exists($page, $プロパティ名)) {
				if ($page->$プロパティ名 == $値) {
					unset($this->_pages[$key]);
				}
			}
		}
	}
	public function 新規チケット判定($チケットID)
	{
		$検索結果 = $this->selectAgree('チケットID', $チケットID);
		if ($検索結果->get_pagecount() == 0) {
			return TRUE;
		}
		return FALSE;
	}
	public function イベント追加($チケットID, $概要, $説明)
	{
		$mantisUrl = self::MANTIS_URL . $チケットID;
		$日時 = date('Y-m-d H:00');
		$カレンダー = new Google_Calender();
		$結果 = $カレンダー->対象カレンダー名を指定する('Toodledo');
		if ($結果 === FALSE) {
			echo "カレンダー指定エラー<br />\n";
			return FALSE;
		}
		$概要 = '#' . $チケットID . ' ' . $概要;
		$イベントID = $カレンダー->イベントを追加する($概要, $mantisUrl."\n".$説明, $日時);
		/*** カレンダー追加エラー */
		if ($イベントID === FALSE) {
			return FALSE;
		}
		$this->追加する($チケットID, (string)$イベントID);
		return TRUE;
	}
	public function イベント更新($チケットID, $概要, $説明, $イベントID)
	{
		$カレンダー = new Google_Calender();
		$カレンダー->対象カレンダー名を指定する('Toodledo');
		/*** イベント削除判定 */
		if ($カレンダー->編集イベントを設定する($イベントID)===FALSE) {
			return $this->イベント追加($チケットID, $概要, $説明);
		}
		$mantisUrl = self::MANTIS_URL . $チケットID;
		$概要 = '#' . $チケットID . ' ' . $概要;
		return $カレンダー->イベントを変更する($概要,$mantisUrl."\n". $説明, date('Y-m-d H:00'));
	}
}

/*ユニットテストブロック V2*/
if (class_exists('ユニットテストケース')) {
	class マッピング＿チケットカレンダーログ_test extends ユニットテストケース
	{
		protected $テストするクラス名='マッピング＿チケットカレンダーログ';
		//ここがテストケースの記載場所
		function test_新規チケット判定＿チケットＩＤがマッピング済みであればＦＡＬＳＥを返す()
		{
			$this->テストクラスインスタンス = new マッピング＿チケットカレンダーログ();
			$this->テストクラスインスタンス->追加する('123', '456');
			$this->assertEqual($this->テストクラスインスタンス->新規チケット判定('123'), FALSE);
			$this->assertEqual($this->テストクラスインスタンス->新規チケット判定('456'), TRUE);
		}
		function test_イベント追加()
		{
			$this->テストクラスインスタンス = new マッピング＿チケットカレンダーログ();
			$this->テストクラスインスタンス->イベント追加('252', 'くまのプーさん', 'なんとかなるさ。');
		}
		function test_イベント更新()
		{
			$this->テストクラスインスタンス = new マッピング＿チケットカレンダーログ();
			$検索結果 = $this->テストクラスインスタンス->selectAgree('チケットID', '252');
			$イベントID = $検索結果->page(0)->カレンダーイベントID;
			$this->テストクラスインスタンス->イベント更新('252', 'くまのプーさんじゃない', 'これでしょう', $イベントID)	;
		}
	}
}